package sword.offer;

import java.util.*;

/**
 * 从上到下打印出二叉树的每个节点，同一层的节点按照从左到右的顺序打印。
 * @author 胡宇轩
 * @Email: yuxuan.hu01@bianlifeng.com
 */
public class ThirtyTwo {
    // 使用广度优先搜索 BFS
    class Solution {
        public int[] levelOrder(TreeNode root) {
            if(Objects.isNull(root)){
                return new int[0];
            }
            List<Integer> result = new ArrayList<>();
            Queue<TreeNode> queue = new ArrayDeque<>();
            queue.add(root);
            while (!queue.isEmpty()){
                TreeNode currNode = queue.poll();
                if(currNode!=null){
                    result.add(currNode.val);
                    if(Objects.nonNull(currNode.left)){
                        queue.add(currNode.left);
                    }
                    if(Objects.nonNull(currNode.right)){
                        queue.add(currNode.right);
                    }
                }
            }
            return result.stream().mapToInt(Integer::valueOf).toArray();
        }
    }


    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }
}
